import PQueue from "./utils/p-queue/index";

class AsyncTask {
    #queue;
    constructor(options) {
        this.#queue = new PQueue(options)
        if(options.execList.length) {
            options.execList.forEach((row, index) => {
                this.#addTask(() => options.task({...row, $index: index}))
            });
        }
        if(options.onIdle) {
            this.#queue.onIdle().then(options.onIdle)
        }

        if(options.onEmpty) {
            this.#queue.onEmpty().then(options.onEmpty)
        }
    }

    exec() {
        if(this.#queue && this.#queue.isPaused) {
            this.#queue.start()
        }
    }

    #addTask(_function, options) {
        this.#queue.add(_function, options)
    }

    clear() {
        if(this.#queue) {
            this.#queue.clear()
        }
    }

    pause() {
        if(this.#queue) {
            this.#queue.pause()
        }
    }

    start() {
        if(this.#queue) {
            this.#queue.start()
        }
    }
}

export default AsyncTask